﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using DevExpress.Xpf.Core;
using ChatApp.Client.Common;
using ChatApp.Client.ChatAppServiceReference;
using System.ServiceModel;
using DevExpress.XtraEditors.DXErrorProvider;


namespace ChatApp.Client
{
    /// <summary>
    /// Interaction logic for DangKyNguoiDung.xaml
    /// </summary>
    public partial class DangKyNguoiDung : DXWindow, IChatAppServiceCallback
    {
        #region Fields

        private ChatAppServiceClient service;

        #endregion

        public DangKyNguoiDung()
        {
            InitializeComponent();
            service = new ChatAppServiceClient(new InstanceContext(this));
        }

        private void btnDangKy_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Nếu có lỗi thì kết thúc xử lý
                if (CheckValidateError())
                    return;

                // Tiếp tục xử lý thêm mới người dùng
                User user = new User();
                user.UserName = txtTaiKhoan.Text;
                user.PassWord = ChatAppGlobal.EncodeMD5(txtMatKhau.Text);
                user.Email = txtEmail.Text;
                service.CreateUser(user);
                DXMessageBox.Show("Đăng ký thành công !", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                this.Close();
                Login formLogin = ChatAppGlobal.FormLogin as Login;
                formLogin.txtTenDangNhap.Focus();
                ChatAppGlobal.FormLogin.Show();
            }
            catch (Exception)
            {
                DXMessageBox.Show("Đăng ký không thành công !", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            
        }

        /// <summary>
        /// Kiểm tra textbox tài khoản và text box password có hợp lệ hay không ngay khi bấm nút tạo người dùng
        /// Nếu lỗi trả về true
        /// Không lỗi trả về false
        /// </summary>
        /// <returns></returns>
        private bool CheckValidateError()
        {
            // Tiến hành kiểm tra tài khoản
            bool isExistingError = false;
            txtTaiKhoan.CausesValidation = true;
            txtTaiKhoan.DoValidate();
            if (txtTaiKhoan.HasValidationError)
                isExistingError = true;

            // Tiến hành kiểm tra mật khẩu
            txtMatKhau.CausesValidation = true;
            txtMatKhau.DoValidate();
            if (txtMatKhau.HasValidationError)
                isExistingError = true;

            return isExistingError;
        }

        private void btnDong_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
            ChatAppGlobal.FormLogin.Show();
        }

        private void DXWindow_Closed(object sender, EventArgs e)
        {
            this.Close();
            ChatAppGlobal.FormLogin.Show();
        }

        private void txtTaiKhoan_Validate(object sender, DevExpress.Xpf.Editors.ValidationEventArgs e)
        {
            if (string.IsNullOrEmpty(e.Value as string))
            {
                e.SetError("Thông tin không được để trống",ErrorType.Critical);
                e.IsValid = false;
                return;
            }

            if ((e.Value as string).Length < 6)
            {
                e.SetError("Thông tin phải lớn hơn hoặc bằng 6 kí tự", ErrorType.Critical);
                e.IsValid = false;
                return;
            }

            if (service.IsDuplicateUser(e.Value as string))
            {
                e.SetError("Tài khoản đã tồn tại. Vui lòng nhập tài khoản khác !!!", ErrorType.Critical);
                e.IsValid = false;
                return;
            }
            e.IsValid = true;
        }

        private void txtMatKhau_Validate(object sender, DevExpress.Xpf.Editors.ValidationEventArgs e)
        {
            if (string.IsNullOrEmpty(e.Value as string))
            {
                e.SetError("Thông tin không được để trống", ErrorType.Critical);
                e.IsValid = false;
                return;
            }
        }

        public void RefreshContentChat(int idRoom, string tenRoom, string userNameSend, string textChat, bool laChatRoom)
        {
        }
    }
}
